home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / gfx / misc / startdia.lha / DiaSlide.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  1994-02-01  |  9.7 KB  |  283 lines

  1. /*
  2.  * Program      : DiaSlide.rexx.
  3.  * Version      : 1.1 (Added scrolling!)
  4.  * Author       : Paul Kolenbrander. Copyright ©1993. All Rights Reserved.
  5.  * Distribution : Non-Commercially only! *Any* vendor or person engaged in any
  6.  *                commercial enterprise, wishing to incorporate, give, or in
  7.  *                any other way hand-over this script, should first obtain
  8.  *                written permission for that from me at the below address
  9.  *
  10.  *                Paul Kolenbrander
  11.  *                Turfveldenstraat 37
  12.  *                NL-5632 XH  EINDHOVEN
  13.  *                The Netherlands
  14.  *                Phone : +31-40-415752 / Fax : +31-40-426446
  15.  *                Electronic Mail - InterNet : boinger@myamy.hacktic.nl
  16.  *                                  UseNet   : paulk@stack.urc.tue.nl
  17.  *                                  FidoNet  : 2:2802/123.1
  18.  *                                  AmigaNet : 39:150/101.1
  19.  *                                  NLA-Net  : 14:106/100.1
  20.  *                                  WarpSpeed: 147:1702/2.1
  21.  *
  22.  * Purpose      : Display a directory full of pictures with Alexander Pratsch
  23.  *                DIA program using random transitions. 
  24.  *
  25.  * Usage        : rx DiaSlide.rexx [<Directory name> <Delay period>]
  26.  *                Directory name - Where this script looks for the pictures. 
  27.  *                                 eg. Sys:Pics or Graphics:. When no path is
  28.  *                                 given, the script uses current directory.
  29.  *                Delay period   - Time to wait between loading pictures in 
  30.  *                                 1/50th of a second. When not specified it  
  31.  *                                 defaults to 5 seconds. If you specify a 0
  32.  *                                 the script will wait for you to press the
  33.  *                                 left mousebutton to load in the next file.
  34.  *
  35.  * It would be best to put only picture files in the directory, but this script
  36.  * has rudimentary error-checking and won't really mind other files to be present
  37.  * also. It will slow down performance though as it has to load these.
  38.  *
  39.  * Newly added feature... When you select a delay period by mouse-click (delay = 0)
  40.  * you can now scroll around pictures that are larger than the screen. All around 
  41.  * the screen are 25 pixel wide invisibale scroll bars. Click in the appropriate one 
  42.  * and the picture will scroll 25 pixels out of that direction... Click anywhere in
  43.  * the picture outside those scrollbars and the next picture is loaded. Where you 
  44.  * can also scroll around in. 
  45.  *
  46.  * NOTE: Scrolling only works when the loaded picture is LARGER than the screen it is
  47.  *       displayed in... And only those hidden parts can be scrolled into sight.
  48.  *
  49.  *                    Screen & Scroll Bar lay-out...
  50.  *                      
  51.  *             +--------------------------------------+ -
  52.  *             |  |         Scroll Down            |  | | 25 pixels wide
  53.  *             |S |--------------------------------| S| - 
  54.  *             |c |                                | c|
  55.  *             |r |                                | r|
  56.  *             |o |                                | o|
  57.  *             |l |             Exit               | l|
  58.  *             |l |            Scroll              | l|
  59.  *             |  |           Routine.             |  |
  60.  *             |R |                                | L|
  61.  *             |i |                                | e|
  62.  *             |g |                                | f|
  63.  *             |h |                                | t|
  64.  *             |t |--------------------------------|  | -
  65.  *             |  |         Scroll Up              |  | | 25 pixels wide
  66.  *             +--------------------------------------+ - 
  67.  *             |--|                                |--|
  68.  *             25 pixels wide                   25 pixels wide
  69.  *
  70.  */
  71.  
  72. /* Parse the arguments */
  73. PARSE ARG dirname wait
  74.  
  75. /* If no directory name has been specified, we just get ourselves the current one. */
  76. IF dirname = 'dirname' | dirname = '' | dirname = 'DIRNAME' THEN dirname=pragma('D')
  77.  
  78. /* And if no wait period has been specified, we set a default 5 second wait */
  79. IF wait = 'wait' | wait = 'WAIT' THEN wait = 250
  80.  
  81. /* Set the ToolTypes. Please adjust to your own configuration and liking */
  82. diaName = 'EGS:Piccolo/Dia/Dia "SCREEN=PICOa:SVGA 800x600" DEPTH=16 AUTOCLEAR=OFF DELAY=1';
  83.  
  84. /* We need the rexxsupport.library, so let's check if it's there */ 
  85. IF (~SHOW( 'L', "rexxsupport.library" ) ) THEN DO
  86.    IF (~ADDLIB("rexxsupport.library", 0, -30, 0 )) THEN DO
  87.       EXIT
  88.    END
  89. END
  90.  
  91. OPTIONS RESULTS
  92.  
  93. Max_Seconds_To_Load = 60
  94. Flag = 0
  95.  
  96. /* Check if Dia is already running. If not, then start it up. */
  97. TIME( 'R' )
  98. DO WHILE (TIME( 'E' ) < Max_Seconds_To_Load) & (POS( 'rainbow', SHOW( 'Ports' ) ) = 0)
  99.    IF Flag = 0 THEN DO
  100.       /* Set whatever command line arguments you want. */
  101.       ADDRESS COMMAND 'run <nil: >nil: ' || diaName;
  102.       Flag = 1
  103.    END
  104.    ADDRESS COMMAND 'WAIT 1'
  105. END
  106.  
  107. IF POS( 'rainbow', SHOW( 'Ports' ) ) = 0 THEN DO
  108.    SAY "Could not start up DIA. Exiting!"
  109.    EXIT
  110. END
  111.  
  112. filelist=TRANSLATE(SHOWDIR(dirname,'f','0a'x),'80'x,'200a'x)
  113.  
  114. /* Let's seed the ARexx random generator using the time of day. ;-) */
  115. which = RANDOM(1,9, TIME('M') + TIME('H')) 
  116.  
  117. AUTOCLEAR OFF
  118.  
  119. /* Here we get all the filenames and tack a full path to the front of each. */ 
  120. i=1
  121. DO i=1 TO WORDS(filelist)
  122.    filename = TRANSLATE((WORD(filelist,i)),'20'x, '80'x)
  123.    IF ( (RIGHT(dirname, 1) ~= '/') & (RIGHT(dirname, 1) ~= ':') ) THEN dirname=dirname || '/'
  124.    DiaFile=dirname || filename
  125.    CALL ShowDia(Diafile)
  126. END
  127. EXIT
  128.  
  129. /* T-t-t-that's all f-f-f-folks! Y'awl come back now, ya hear. */
  130.  
  131. /*---------------------------- Subroutine Section ---------------------------*/
  132.  
  133. ShowDia:
  134. /* Here we try and load the file. */
  135. PARSE ARG Diafile
  136.  
  137. IF EXISTS(Diafile) THEN DO                         /* existing File ? */
  138.    address "rainbow";
  139.    AUTOCLEAR OFF
  140.  
  141.    /* If you don't like a list of filenames in your CLI, comment the below line out. */
  142.    SAY "loading " || Diafile || "..."
  143.  
  144.    OPTIONS RESULTS     
  145.    LOAD Diafile                                /* If yes, load Picture */
  146.    IF result = 0 THEN DO 
  147.       /* we've loaded a valid format. So let's get to work on the transition. */
  148.       CALL Transitie
  149.       IF   wait = 0 THEN CALL Scrollem         /* Wait for mouseclick? */
  150.       ELSE DELAY wait
  151.    END 
  152. END
  153. ELSE DO
  154.    say Diafile || " doesn't exist."
  155. END
  156. RETURN
  157.  
  158.  
  159. Transitie:
  160. /* In this subroutine we determine which transition mode to use. */
  161. /* First we get a random value. */
  162. old = which
  163. which=RANDOM(1,9) 
  164.  
  165. /* little kludge to reduce the possibility of two identical transitions after another. */ 
  166. If old = which THEN which=RANDOM(1,9,old * which + i) 
  167.  
  168. /* And here we decide on our lucky winner */
  169. IF which = 1 THEN transitie=TOP
  170. IF which = 2 THEN transitie=BOTTOM
  171. IF which = 3 THEN transitie=LEFT
  172. IF which = 4 THEN transitie=RIGHT
  173. IF which = 5 THEN DO
  174.    transitie=CHECKER
  175.    /* And some extra effects for Checker modus */
  176.    block = RANDOM(5,25)
  177.    frame = RANDOM(1,10)
  178.    SETCHECKER block frame
  179. END
  180. IF which = 6 THEN transitie=MIDDLE
  181. IF which = 7 THEN transitie=HALFLINE
  182. IF which = 8 THEN DO
  183.    transitie=DISSOLVE
  184.    /* A well as  for Dissolve modus */
  185.    block = RANDOM(5,30)
  186.    SETDISSOLVE block
  187. END
  188. IF which = 9 THEN transitie=BORDER
  189.  
  190. /* And clear the screen. Unless all the pictures you show are the same size. */
  191. /* Then you might want to comment out the below CLEARSCREEN line. */
  192. CLEARSCREEN
  193.  
  194. SHOW transitie
  195.  
  196. /* And reset the default values for CHEKER and DISSOLVE modes if need be.*/
  197. IF which = 5 | which = 8 THEN DO
  198.    SETCHECKER 8 8 
  199.    SETDISSOLVE 8
  200. END
  201.  
  202. RETURN
  203.  
  204. Scrollem:
  205. /* In this subroutine we allow the user to scroll around the picture if it is */
  206. /* larger than the screen.  */
  207.  
  208. OPTIONS RESULTS
  209. GET_SW
  210. scx = result
  211. GET_SH
  212. scy = result
  213. GET_W
  214. picx = result
  215. GET_H
  216. picy = result
  217.  
  218. /*
  219.  debug info... Uncomment if you like to see what's going on.
  220. say 'Screen Width : ' || scx
  221. say 'Screen Height: ' || scy
  222. say 'Picture Width: ' || picx
  223. say 'PictureHeight: ' || picy
  224.   end of debug info
  225. */
  226.  
  227. einde = 0
  228. SCROLLING ON
  229. xpos = 0
  230. ypos = 0
  231. DO WHILE einde = 0
  232.         WAITMOUSE                         /* Wait for mouseclick? */
  233. /* If clicked, we get the mouse x and y coordinate */
  234.  
  235.         OPTIONS RESULTS
  236.         GET_MX
  237.         mx = result
  238.         GET_MY
  239.         my = result
  240. /*
  241.   some more debug info...
  242.         say 'Mouse X pos. : ' || mx
  243.         say 'Mouse Y pos. : ' || my
  244.         say 'Pict. X pos  : ' || xpos
  245.         say 'Pict. Y pos  : ' || ypos
  246.   end the end of it
  247. */
  248.  
  249. /* Clicked in the rightmost 25 pixels so we scroll to the left */
  250.         IF (scx - mx) <= 25 THEN DO
  251.                 xpos = xpos + 25
  252.                 IF xpos > (picx - scx) THEN xpos = picx - scx
  253.                 SCROLLTO xpos ypos    /* Scroll Right */
  254.         END
  255.  
  256. /* Clicked in the leftmost 25 pixels, so we scroll to the right */
  257.         IF mx <= 25         THEN DO
  258.                 xpos = xpos - 25
  259.                 IF xpos < 0 THEN xpos = 0
  260.                 SCROLLTO xpos ypos     /* Scroll Left  */
  261.         END
  262.  
  263. /* Clicked in the uppermost 25 pixels, so we scroll down */
  264.         IF my <= 25 & mx > 25 & (scx - mx) > 25 THEN DO
  265.                 ypos = ypos - 25
  266.                 IF ypos < 0 THEN ypos = 0    
  267.                 SCROLLTO xpos ypos     /* Scroll Down  */
  268.         END
  269.  
  270. /* Clicked in the lowermost 25 pixels, so we scroll up */
  271.         IF (scy - my) <= 25 & mx > 25 & (scx - mx) > 25 THEN DO
  272.                 ypos = ypos + 25
  273.                 IF ypos > (picy - scy) THEN ypos = picy - scy  
  274.                 SCROLLTO xpos ypos       /* Scroll Up    */
  275.         END
  276.  
  277. /* Clicked out of the scroll boxes. Means we exit this scroll routine */
  278.         IF (scx - mx) > 25 & mx > 25 & my > 25 & (scy - my) > 25 THEN
  279.                 einde = 1          /* Exit the scroll routine */
  280. END
  281.                          
  282. RETURN
  283.